package com.xuelang.pipeline.artifact.app.resource;

import com.xuelang.pipeline.artifact.client.common.constant.DictDTO;
import com.xuelang.pipeline.artifact.client.common.request.PageParam;
import com.xuelang.pipeline.artifact.client.common.result.PageRecord;
import com.xuelang.pipeline.artifact.client.resource.dto.ArtifactAttributeDTO;
import com.xuelang.pipeline.artifact.client.resource.dto.ArtifactToolDTO;
import com.xuelang.pipeline.artifact.client.resource.dto.ArtifactToolQuery;
import com.xuelang.pipeline.artifact.client.resource.dto.PipelineArtifactToolDTO;

import java.util.List;

/**
 * 制品工具服务接口
 *
 * @author xiwen.zxg
 * @since 2024/5/15
 */
public interface ArtifactToolService {
    /**
     * 查询制品工具列表(有过滤条件)
     *
     * @param dtoPageParam
     * @return
     */
    PageRecord<ArtifactToolDTO> pageList(PageParam<ArtifactToolQuery> dtoPageParam);

    /**
     * 查询制品工具列表(有过滤条件)
     *
     * @param artifactToolQuery
     * @return
     */
    List<ArtifactToolDTO> list(ArtifactToolQuery artifactToolQuery);

    /**
     * 添加制品工具
     *
     * @param artifactToolDTO
     * @return
     */
    Boolean add(ArtifactToolDTO artifactToolDTO);

    /**
     * 更新制品工具
     *
     * @param artifactToolDTO
     * @return
     */
    Boolean update(ArtifactToolDTO artifactToolDTO);

    /**
     * 删除制品工具
     *
     * @param artifactToolUuid
     * @return
     */
    Boolean delete(String artifactToolUuid);

    /**
     * 查询制品工具
     *
     * @param artifactToolUuid
     * @return
     */
    ArtifactToolDTO query(String artifactToolUuid);

    /**
     * 获取制品仓库地址前缀
     *
     * @param artifactType 制品类型
     * @return
     */
    String getArtifactUrlPrefix(String artifactType);

    /**
     * 得到仓库指南
     *
     * @param artifactToolUuid
     * @param userId
     * @return
     */
    ArtifactAttributeDTO getArtifactGuide(String artifactToolUuid, String userId);

    /**
     * 查询制品工具列表-提供流水线使用
     *
     * @return
     */
    PageRecord<PipelineArtifactToolDTO> listArtifactTool();

    /**
     * 根据类型查询任务需要的仓库字典列表
     *
     * @return
     */
    List<DictDTO> queryBuildTaskDict(String artifactType);
}
